#pragma once 

#include<iostream>
#include<unistd.h>
#include<vector>

typedef void (*fun_t)();//函数指针，指向函数地址

//任务
void PrintLog()
{
    std::cout << "pid: " << getpid() << "，打印日志任务，正在被执行..." <<  std::endl;
}

void InsertMySQL()
{
    std::cout << "执行数据库任务,正在被执行..." << std::endl;
}

void NetRequest()
{
    std::cout << "执行网络请求任务，正在被执行..." << std::endl;
}

//约定，每一个command都必须是4字节
#define COMMAND_LOG 0
#define COMMAND_MYSQL 1
#define COMMAND_REQEUST 2

//任务类
class Task
{
public:
    //创建Task对象时，就调用构造函数：装载任务列表
    Task()
    {
        funcs.push_back(PrintLog);
        funcs.push_back(InsertMySQL);
        funcs.push_back(NetRequest);
    }
    //任务类的执行函数
    void Excute(int command)
    {
        if(command >= 0 && command < funcs.size())
        {
            funcs[command]();//调用对应的任务函数
        }
    }
    ~Task()
    {}

public:
    std::vector<fun_t> funcs;
};
